﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Bomberman
{
	[Serializable]
	public abstract class Personaje : Posicionable, DependienteDelTiempo
	{

		public string nombre;
		protected int velocidadDisparo = 50;
		private int velocidad;
		private int contadorDisparoBombas = 150;	// La primer bomba toma más tiempo para poner
		private int contadorVelocidad = 0;
		protected int vida;
		protected Casillero casilleroActual;

		public Personaje(int vida, int velocidad, string nombre)
		{
			this.nombre = nombre;
			this.vida = vida;
			this.velocidad = velocidad;
		}

		public int Vida
		{
			get { return vida; }
		}

		public int Velocidad
		{
			get { return velocidad; }
			set { velocidad = value; }
		}

		public string Nombre
		{
			get { return nombre; }
		}

		protected bool SePuedeMover()
		{
			if (contadorVelocidad <= 0 && Vida > 0)
			{
				contadorVelocidad = velocidad;
				return true;
			}
			return false;
		}

		protected bool PuedeDisparar()
		{
			if (contadorDisparoBombas <= 0 && Vida > 0)
			{
				contadorDisparoBombas = velocidadDisparo;
				return true;
			}
			return false;
		}

		// Implementacion de Posicionable
		public virtual void Posicionar(Casillero unCasillero)
		{
			casilleroActual = unCasillero;
			casilleroActual.AgregarContenido(this);
		}

		public bool ObstruyeCamino()
		{
			return true;
		}

		public Casillero Posicion()
		{
			return casilleroActual;
		}

		// Implementacion de Atacable
		public void RecibirAtaque(int danio)
		{
			vida = vida - danio;
			if (vida <= 0)
			{
				vida = 0;
				casilleroActual.QuitarContenido(this); //Si muere el personaje sale del contenido            
			}
		}


		// Implementacion de la interfaz Representable
		public String ObtenerNombre()
		{
			return nombre;
		}

		public void Update()
		{
			contadorVelocidad--;
			contadorDisparoBombas--;
		}

	}
}